import { defineStore } from 'pinia'
import { ref } from 'vue'
import config from '@/config'

export const useUserStore = defineStore('user', () => {
    // 用户信息
    const userInfo = ref(null)
    // 登录状态
    const isLoggedIn = ref(false)
    // 企业微信登录code
    const qwCode = ref('')
    // token
    const token = ref('')

    // 设置用户信息
    const setUserInfo = (info) => {
        userInfo.value = info
        // 可以选择将用户信息存储在localStorage中，以便页面刷新后恢复
        localStorage.setItem('userInfo', JSON.stringify(info))
    }

    // 初始化用户状态
    const initUserState = () => {
        // 从本地存储获取token
        const storedToken = localStorage.getItem('token')
        if (storedToken) {
            token.value = storedToken
            isLoggedIn.value = true

            // 从localStorage中恢复用户信息
            const storedUserInfo = localStorage.getItem('userInfo')
            if (storedUserInfo) {
                try {
                    const parsedInfo = JSON.parse(storedUserInfo)
                    // 验证解析的对象是否符合UserInfoType的结构
                    if (parsedInfo && typeof parsedInfo === 'object') {
                        userInfo.value = parsedInfo
                    } else {
                        // 数据结构不符合预期，从服务器获取
                        fetchUserInfo()
                    }
                } catch (e) {
                    console.error('解析用户信息失败', e)
                    // 如果解析失败，则从服务器获取用户信息
                    fetchUserInfo()
                }
            } else {
                // 如果没有保存用户信息，则从服务器获取
                fetchUserInfo()
            }
        }
    }

    // 设置token
    const setToken = (newToken) => {
        token.value = newToken
        localStorage.setItem('token', newToken)
        isLoggedIn.value = true
    }

    // 清除用户数据
    const clearUserData = () => {
        token.value = ''
        userInfo.value = null
        isLoggedIn.value = false
        localStorage.removeItem('token')
    }

    // 获取用户信息
    const fetchUserInfo = async () => {
        try {
            // 如果获取用户信息失败，可能是token过期
        } catch (error) {
            console.error('获取用户信息失败', error)
            // 获取用户信息失败，清除登录状态
            clearUserData()
        }
    }

    // 设置企业微信授权码
    const setQwCode = (code) => {
        qwCode.value = code
    }

    // 企业微信网页授权登录
    const qwWebLogin = async () => {
        // 获取当前URL
        const currentUrl = encodeURIComponent(window.location.href)
        // 企业微信网页授权地址
        const corpid = config.corpId // 从配置文件中获取
        const redirect_uri = currentUrl
        const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${corpid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`

        // 跳转到企业微信授权页面
        window.location.href = authUrl
    }

    return {
        userInfo,
        isLoggedIn,
        qwCode,
        token,
        initUserState,
        setToken,
        clearUserData,
        fetchUserInfo,
        setQwCode,
        qwWebLogin,
        setUserInfo,
    }
})
